#pragma once

#include <cstdint>

using namespace std;

class base_msg
{
public:
    enum TYPE
    {
        service = 1,
        socket_accept = 2,
        socket_rw = 3,
    };
    uint8_t type;        // 消息类型
    char load[999999]{}; // 测试内存泄漏

    // 省略构造函数
    //
    // 析构函数
    virtual ~base_msg() {}; // 虚析构函数
};

#include <memory>

// 服务之间的消息类型
class service_msg : public base_msg
{
public:
    uint32_t source;       // 消息源
    shared_ptr<char> buff; // 消息内容, 一个指向 char 类型的指针 (char *)
    size_t size;           // 消息大小
};

// 有新连接
class socket_accept_msg : public base_msg
{
public:
    int listen_fd;
    int client_fd;
};

// 连接可读可写
class socket_rw : public base_msg
{
public:
    int fd;
    bool is_read = false;
    bool is_write = false;
};
